;=================================================
;gdt.inc 
;=================================================

%ifndef __GDT_INC_67343546FDCC56AAB872_INCLUDED__
%define __GDT_INC_67343546FDCC56AAB872_INCLUDED__

bits	16

;===========================================
; InstallGDT() - Function to install our GDT
;===========================================

InstallGDT:

	cli				; clear interrupts
	pusha				; save registers
	lgdt 	[toc]			; load GDT into GDTR
	sti				; enable interrupts
	popa				; restore registers
	ret				; All done!

;===========================================
; Global Descriptor Table (GDT)
;===========================================

gdt_data: 
	dd 0 				; null descriptor
	dd 0 				; done twice cause one does 4 bytes

; gdt code:				
	dw 0FFFFh 			; limit low
	dw 0 				; base low
	db 0 				; base middle
	db 10011010b 			; access
	db 11001111b 			; granularity
	db 0 				; base high

; gdt data:				
	dw 0FFFFh 			; limit low (Same as code)
	dw 0 				; base low
	db 0 				; base middle
	db 10010010b 			; access
	db 11001111b 			; granularity
	db 0				; base high

end_of_gdt:
toc: 
	dw end_of_gdt - gdt_data - 1 	; limit (Size of GDT)
	dd gdt_data 			; base of GDT


%define NULL_DESC 0
%define CODE_DESC 0x8
%define DATA_DESC 0x10

%endif
